#include "seqstack.h"

//创建
seqStack *creat()
{
	seqStack *S=(seqStack*)malloc(sizeof(seqStack));
	if(NULL==S)
	{
		printf("创建失败\n");
		return NULL;
	}
	//初始化
	S->top=-1;
	//printf("创建成功\n");
	return S;
}
//判空
int empty(seqStack *S)
{
	if(NULL==S)
	{
		printf("栈不合法\n");
		return -1;
	}
	return S->top==-1?1:0;

}
//判满
int full(seqStack *S)
{
    if(NULL==S)
	{
		printf("栈不合法\n");
		return -1;
	}
	return S->top==MAX-1?1:0;

}

//入栈、进栈、压栈
int push(seqStack *S,datatype e)
{
	//判断逻辑
	if(NULL==S||full(S))
	{
		printf("入栈失败\n");
		return -1;
	}
	//入栈操作
	S->data[++S->top]=e;
	//printf("入栈成功\n");
	return 0;
}

//出栈、弹栈
int pop(seqStack *S,datatype *p)
{
	//判断逻辑
	if(NULL==S||empty(S))
	{
		printf("出栈失败\n");
		return -1;
	}
	//printf("%d出栈成功\n",S->data[S->top]);
	*p=S->data[S->top];
	S->top--;
	return 0;
}

//遍历栈
void show(seqStack *S)
{
	//判断逻辑
	if(NULL==S||empty(S))
	{
		printf("遍历失败\n");
		return;
	}
	//遍历
	printf("从栈底到栈顶元素分别是：");
	for(int i=0;i<=S->top;i++)
	{
		printf("%d\t",S->data[i]);
	}
	printf("\n");
}
//销毁栈
void destroy(seqStack *S)
{
	if(NULL!=S)
	{
		free(S);
	}
	S=NULL;          //防止野指针
	printf("释放成功\n");
}

//进制转换
void conversion(int n,int m)
{
	seqStack *S=creat();
	while(n/m!=0)
	{
		int a=n%m;
		push(S,a);
		n/=m;
	}
	push(S,n);
	int b=0;
	printf("进制转换结果：");
	while(!empty(S))
	{
		pop(S,&b);
		if(b>-1&&b<10)
		{
			printf("%d",b);
		}
		else if(b>=10&&b<=15)
		{
			char c=b+55;
			printf("%c",c);
		}
		else
		{
			printf("进制转换失败");
		}
	}
	printf("\n");
}

